#!/bin/bash
#定义函数，输出带颜色文本
function print_newline_color() {
    # 使用 ANSI 转义序列添加颜色,接受一个参数（通过 $1 获取）
    #-e 启用转义解析,33-红色,32-绿色
    echo -e '\033[32m***************************'$1'************************************\033[0m'
}
function print_color() {
    # 使用 ANSI 转义序列添加颜色,接受一个参数（通过 $1 获取）
    #-e 启用转义解析,33-红色,32-绿色
    #-n不换行。
    # $1: 要输出的信息 $2:是否换行，1-是 0-否
    if test $2 == 1;then
        echo -e '\033[32m'$1'\033[0m'
    else
        echo -ne '\033[32m'$1'\033[0m'
    fi
}
#选择目录
function choose_dir() {
    choose_num=$2;
    #判空
    if [ -z "$choose_num" ]; then
      echo '序号不能为空!'
      echo 1
    fi
    #-1退出
    if test $choose_num == -1;then
      echo 1
    fi
    #保存选中的目录名
    option_name=""
    #先设置分隔符为换行符
    IFS=$'\n'
    for i in $1
      do
          t_num=`echo $i | awk -F ' ' '{print $1}'`
          if test $t_num == $choose_num;then
            option_name=`echo $i | awk -F ' ' '{print $2}'`
            break;
          fi
      done
    echo $option_name
}

#编译项目
function compile_project() {
    #父级模块
    parent_module_name=$1
    #子模块
    module_name=$2
    if test $module_name == "1";then
        exit 1
    fi
    print_color "所选目录-------------------------------------->" "0"
    print_color $module_name "1"
    #输出信息
    print_newline_color "开始编译"$module_name
    #编译打包
    mvn clean install -pl $module_name
    #输出信息
    print_newline_color $module_name"编译完毕"
    #切到$module_name下，获取pom版本
    cd $module_name
    artifactId=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout)
    version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
    cd ..
    #源目录
    source_dir=$module_name/target
    #判断父级模块名，如果是code-generator，则输出到gen-template目录；否则输出到utility-tools目录
    dest_dir=`echo ../utility-tools`
    if [[ "$parent_module_name" == "code-generator" ]]; then
      dest_dir=`echo ../gen-template/${module_name/generator/template}`
    fi
    #源jar包名
    source_jar=$artifactId'-'$version'-jar-with-dependencies.jar'
    echo 'source_jar-------------------------------------->'$source_dir/$source_jar
    #最终jar包名
    dest_jar=$artifactId'.jar'
    echo 'dest_jar-------------------------------------->'$dest_dir/$dest_jar
    #将带jar-with-dependencies.jar的jar包，重名，并移动到,对应的模板目录下
    mv $source_dir/$source_jar $dest_dir/$dest_jar
    echo $dest_jar'-------------------------------------->复制完毕!'
}
#父级模块名列表
parent_module_list=`echo -e "code-generator\ndaily-utility-tool" | cat -n`
print_color "可编译模块列表: " "1"
echo "$parent_module_list"
print_color "请选择模块序号: " "0"
read moduleNo
#获取选中模块名
parent_module_name=$(choose_dir "$parent_module_list" $moduleNo)
if test $parent_module_name == "1";then
    exit 1
fi
#切换目录
cd $parent_module_name
#列出目录:只显示以 d 开头的行（d 表示目录权限）
module_list=`ls -l | grep "^d" | awk -F ' ' '{print $9}' | cat -n`
print_color "可编译项目列表: " "1"
echo "$module_list"
print_color "请选择项目序号: " "0"
read seqNo
#切换到上级目录,先编译外层父级pom、common-tool
cd ../
print_newline_color "开始编译java-code-generator"
mvn clean install -N
#输出信息
print_newline_color "java-code-generator编译完毕"
print_newline_color "开始编译common-tool"
mvn clean install -pl common-tool
#输出信息
print_newline_color "common-tool编译完毕"
#编译parent_module_name、内层父级pom
cd $parent_module_name
print_newline_color "开始编译"$parent_module_name
mvn clean install -N
print_newline_color $parent_module_name"编译完毕"
#如果seqNo=-1，则编译模块下的所有项目;否则编译选中项目
if test $seqNo == -1;then
     IFS=$'\n'
        for i in $module_list
          do
              t_num=`echo $i | awk -F ' ' '{print $1}'`
              #获取选中目录名
              module_name=$(choose_dir "$module_list" $t_num)
              #编译打包
              compile_project $parent_module_name $module_name
          done
    else
      #获取选中目录名
      module_name=$(choose_dir "$module_list" $seqNo)
      #编译打包
      compile_project $parent_module_name $module_name
fi

